#ifndef GDT_H
#define GDT_H

#include "main.h"

#define GDT_ENTRIES 6
#define GDT_FLAG_DATASEG 0x02
#define GDT_FLAG_CODESEG 0x0a
#define GDT_FLAG_TSS     0x09

#define GDT_FLAG_SEGMENT 0x10
#define GDT_FLAG_RING0   0x00
#define GDT_FLAG_RING3   0x60
#define GDT_FLAG_PRESENT 0x80

#define GDT_FLAG_4K_GRAN 0x800
#define GDT_FLAG_32_BIT  0x400

extern uint32_t tss[32];

/* Ändert einen Eintrag in der GDT
 */
void gdt_set_entry(int, unsigned int, unsigned int, int);

/* Lädt die GDT neu
 */
void gdt_load ();

/* Initialisiert die Einträge der GDT und lädt diese danach mit gdt_load() neu
 */
void gdt_init();

#endif
